import re

'''
此文程序是python正则表达式的例子
尽可能多的举例，希望对大家有很大帮助

元字符
.       匹配换行符以外的任意字符
\w      匹配字母、数字、下划线（所有字符）
\s      匹配任意的空白字符
\d      匹配数字
\n      匹配一个换行符
\t      匹配一个制表符

^       匹配字符串开始
$       匹配字符串结尾

\W、\S、\D、则代表与其对应的小写字符的相反

a|b|c   匹配字符a或字符b或字符c
()      匹配括号内的表达式，也表示一个组
[]      匹配字符组中的字符
[^]     匹配除了字符组中字符的所有字符

量词：控制前面的元字符出现的次数
*       重复0或多次
+       重复1或多次
?       重复0或1次
{n}     重复n次
{n,}    重复n或多次
{n,m}   重复最少n次，最多m次

贪婪匹配和惰性匹配
.*      贪婪匹配（尽可能多获取）
.*?     惰性匹配（尽可能少获取）
'''

content1 = '''
        中国联通电话：10010
        中国移动电话：10086
        中国电信电话：10000
'''

'''
findall
说明：找到所有匹配项
返回类型：list
返回结果：
['10010', '10086', '10000']
'''
result1 = re.findall(r'\d+', content1)
print('findall：', result1)
print('======================\n')

'''
finditer
说明：找到所有匹配项
返回类型：iterator对象，
返回结果：
10010
10086
10000
'''

print('finditer：')
result2 = re.finditer(r'\d+', content1)
for item in result2:
    print(item.group())
print('======================\n')

result3 = re.finditer(r'(<?P=name?>\d+)', content1)
for item in result3:
    print(item.group('name'))
print('======================\n')

'''
search
说明：找到第1个匹配项
返回类型：Match对象，
返回结果：
10010
'''

print('search：')
result4 = re.search(r'\d+', content1)
print(result4)
print(result4.group())
print('======================\n')

'''
match
说明：从字符串开头进行匹配，相当于正则^开始，即^\d+
返回类型：Match对象，
返回结果：
None
'''

print('match：')
result5 = re.match(r'\d+', content1)
print(result5)
print('======================\n')

'''
预加载模式，意思是提前把正则对象加载完毕
'''
print('compile：')
obj = re.compile(r'\d+')
result6 = obj.findall(content1)
print(result6)
print('======================\n')


print('========开始 compile提取=========')
content2 = '''
        <div><span id="10010">中国联通</span></div>
        <div><span id="10086">中国移动</span></div>
        <div><span id="10000">中国电信</span></div>
'''

obj = re.compile(r'<span id="(?P<id>\d+)">(?P<company_name>.*?)</span>')
result7 = obj.finditer(content2)
for result in result7:
    print('{}--{}'.format(result.group('id'), result.group('company_name')))